package Cards;

import Game.Player;
import java.io.Serializable;

public class Effect implements Serializable{
    
    String category;
    String parameter1;
    String parameter2;

    public Effect(String category, String parameter1, String parameter2) {
        this.category = category;
        this.parameter1 = parameter1;
        this.parameter2 = parameter2;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getParameter1() {
        return parameter1;
    }

    public void setParameter1(String parameter1) {
        this.parameter1 = parameter1;
    }

    public String getParameter2() {
        return parameter2;
    }

    public void setParameter2(String parameter2) {
        this.parameter2 = parameter2;
    }
    
    public String describe(){
        switch(category){
            case "0": //Do nothing
                return "Sem efeito";
            case "1": //Damage and Heal
                return "Causa " + parameter1 + " de dano ao oponente e cura seu jogador em " + parameter2;
            case "2": //Damage if Condition - Monster
                return "Combinação - " + parameter1 + "\nCausa " + parameter2 + " de dano ao oponente";
            case "3": //Damage if Power - Monster
                return "Combinação - Poder " + parameter1 + "\nCausa " + parameter2 + " de dano ao oponente";
            case "4": //Heal if Condition - Monster
                return "Combinação - " + parameter1 + "\nCura seu jogador em " + parameter2;
            case "5": //Heal if Power - Monster
                return "Combinação - Poder " + parameter1 + "\nCura seu jogador em " + parameter2;
            case "6": //Cut Attack if Condition - Monster
                return "Combinação - " + parameter1 + "\nCorta o ataque do rival em 1/" + parameter2;
            case "7": //Cut Attack if Power - Monster
                return "Combinação - Poder " + parameter1 + "\n Corta o ataque do rival em 1/" + parameter2;
            case "8": //Cut Attack if Condition - Rival
                return "Rivalidade - " + parameter1 + "\nCorta o ataque do rival em 1/" + parameter2;
            case "9": //Cut Attack if Power - Rival
                return "Combinação - Poder " + parameter1 + "\nCorta o ataque do rival em 1/" + parameter2;
            case "10": //Force Rival to Attack if Condition - Monster
                return "Combinação - " + parameter1 + "\nForça o rival a atacar";
            case "11": //Force Rival to Attack if Power - Monster
                return "Combinação - Poder " + parameter1 + "\nForça o rival a atacar";
            case "12": //Force Rival to Attack if Condition - Rival
                return "Rivalidade - " + parameter1 + "\nForça o rival a atacar";
            case "13": //Force Rival to Attack if Power - Rival
                return "Rivalidade - Poder" + parameter1 + "\nForça o rival a atacar";
            case "14": //Force Rival to Effect if Condition - Monster
                return "Combinação - " + parameter1 + "\nForça o rival a ativar efeito";
            case "15": //Force Rival to Effect if Power - Monster
                return "Combinação - Poder " + parameter1 + "\nForça o rival a ativar efeito";
            case "16": //Force Rival to Effect if Condition - Rival
                return "Rivalidade - " + parameter1 + "\nForça o rival a ativar efeito";
            case "17": //Force Rival to Effect if Power - Rival
                return "Rivalidade - Poder " + parameter1 + "\nForça o rival a ativar efeito";
            default: //Never
                return "";
        }
    }
    
    public void activate(Player owner, Player target, Card monster, Card rival) {
        switch(category){
            case "0": //Do nothing
                break;
            case "1": //Damage and Heal
                target.takeDamage(Integer.parseInt(parameter1));
                owner.beCured(Integer.parseInt(parameter2));
                break;
            case "2": //Damage if Condition - Monster
                if(monster.getName().equals(parameter1) ||
                   monster.getType().equals(parameter1) ||
                   monster.getClan().equals(parameter1))
                    target.takeDamage(Integer.parseInt(parameter2));
                break;
            case "3": //Damage if Power - Monster
                if(monster.getPower() == Integer.parseInt(parameter1))
                    target.takeDamage(Integer.parseInt(parameter2));
                break;
            case "4": //Heal if Condition - Monster
                if(monster.getName().equals(parameter1) ||
                   monster.getType().equals(parameter1) ||
                   monster.getClan().equals(parameter1))
                    owner.beCured(Integer.parseInt(parameter2));
                break;
            case "5": //Heal if Power - Monster
                if(monster.getPower() == Integer.parseInt(parameter1))
                    owner.beCured(Integer.parseInt(parameter2));
                break;
            case "6": //Cut Attack if Condition - Monster
                if(monster.getName().equals(parameter1) ||
                   monster.getType().equals(parameter1) ||
                   monster.getClan().equals(parameter1))
                    rival.setCurrentDamage(rival.getActualDamage() / Integer.parseInt(parameter2));
                break;
            case "7": //Cut Attack if Power - Monster
                if(monster.getPower() == Integer.parseInt(parameter1))
                    rival.setCurrentDamage(rival.getActualDamage() / Integer.parseInt(parameter2));
            case "8": //Cut Attack if Condition - Rival
                if(rival.getName().equals(parameter1) ||
                   rival.getType().equals(parameter1) ||
                   rival.getClan().equals(parameter1))
                    rival.setCurrentDamage(rival.getActualDamage() / Integer.parseInt(parameter2));
                break;
            case "9": //Cut Attack if Power - Rival
                if(rival.getPower() == Integer.parseInt(parameter1))
                    rival.setCurrentDamage(rival.getActualDamage() / Integer.parseInt(parameter2));
                break;
            case "10": //Force Rival to Attack if Condition - Monster
                break;
            case "11": //Force Rival to Attack if Power - Monster
                break;
            case "12": //Force Rival to Attack if Condition - Rival
                break;
            case "13": //Force Rival to Attack if Power - Rival
                break;
            case "14": //Force Rival to Effect if Condition - Monster
                break;
            case "15": //Force Rival to Effect if Power - Monster
                break;
            case "16": //Force Rival to Effect if Condition - Rival
                break;
            case "17": //Force Rival to Effect if Power - Rival
                break;
        }
    }
}
